home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / t3_1 / risc_src.lha / risc_sources / sys / ieee_float.t < prev    next >
Text File  |  1989-06-30  |  2KB  |  49 lines

  1. (herald ieee_float
  2.   (env tsys))
  3.  
  4. ;;; Flonum dismemberment.
  5.  
  6. ;;; Returns sign, and normalized mantissa and exponent  
  7. ;;; PRECISION is number of bits desired in the mantissa 
  8. ;;; EXCESS is the exponent excess
  9. ;;; HIDDEN-BIT-IS-1.? is true if the hidden bit preceeds the
  10. ;;;  binary point (it does in Apollo IEEE, does not on the VAX).
  11.  
  12. (define (normalize-float-parts sign m e precision excess hidden-bit-is-1.?)
  13.   (let* ((have (integer-length m))
  14.          (need (fx- precision have))
  15.          (normalized-m (%ash m need))
  16.          (normalized-e (- (+ e 
  17.                              precision 
  18.                              excess
  19.                              (if hidden-bit-is-1.? -1 0))
  20.                            need)))
  21.      (return (if (= sign 1) 0 1) normalized-m normalized-e)))
  22.  
  23. ;;; Floating point bit fields.
  24.  
  25. ;;; <n,s> means bit field of length s beginning at bit n of the first
  26. ;;; WORD (not longword)
  27. ;;;                    sign      exponent   MSB       fraction
  28. ;;; Apollo IEEE flonum <15,1>    <4,11>     hidden    <0,4>+next 3 words
  29. ;;; VAX11 flonum (D)   <15,1>    <7,8>      hidden    <0,7>+next 3 words
  30. ;;; Apollo IEEE flonum - binary point follows  hidden MSB, 53 bits of
  31. ;;;     precision, if hidden bit is included
  32. ;;; VAX11 flonum (D)   - binary point precedes hidden MSB, 56 bits of
  33. ;;;     precision, if hidden bit is included 
  34.  
  35.  
  36. (define (string->flonum s)
  37.   (kludgy-string->flonum s))
  38.  
  39. (lset *print-flonums-kludgily?* t)
  40.  
  41. (define-handler double-float
  42.   (object nil
  43.     ((extended-number-type self) %%flonum-number-type)
  44.     ((print self stream)
  45.      (if *print-flonums-kludgily?*
  46.          (print-flonum-kludgily self stream)
  47.          (print-flonum self stream)))))
  48.                                                
  49.